Для параметризованной сборки с выбором тега образа, понадобится плагин Active Choices
Переходим в настройки Jenkins‘а
Раздел «Управление плагинами»
Переходим к вкладке «Доступные» и в поиске указываем «Active Choices»
Устанавливаем его. Так же необходим плагин Amazon Web Services SDK
Создаем «New Item» — «Pipeline«, указываем, что это будет параметризованной сборка, и добавляем параметр «Active Choices Reactive Parameter»
Указываем, что это «Groovy Script» и вставляем туда следующее:
import jenkins.model.* import groovy.json.JsonSlurper credentialsId = 'artem-github' gitUri = '[email protected]:artem-gatchenko/ansible-openvpn-centos-7.git' def creds = com.cloudbees.plugins.credentials.CredentialsProvider.lookupCredentials( com.cloudbees.plugins.credentials.common.StandardUsernameCredentials.class, Jenkins.instance, null, null ).find{ it.id == credentialsId} def slurper = new JsonSlurper() def account = gitUri.split(":")[-1].split("/")[0] def repo = gitUri.split(":")[-1].split("/")[-1].split("\\.")[0] def addr = "https://api.github.com/repos/${account}/${repo}/commits" def authString = "${creds.username}:${creds.password}".getBytes().encodeBase64().toString() def conn = addr.toURL().openConnection() conn.setRequestProperty( "Authorization", "Basic ${authString}" ) def response_json = "${conn.content.text}" def parsed = slurper.parseText(response_json) def commit = [] commit.add("Latest") for (int i = 0; i < parsed.size(); i++) { commit.add(parsed.get(i).sha) } return commit
Где значение переменных, «credentialsId» — Jenkins Credentials ID с токеном к GitHub‘у;
«gitUri» — полный путь к нужному репозиторию;
Тоже самое, но уже через Pipeline
Pipeline:
properties([ parameters([ [$class: 'StringParameterDefinition', defaultValue: '[email protected]:artem-gatchenko/ansible-openvpn-centos-7.git', description: 'Git repository URI', name: 'gitUri', trim: true ], [$class: 'CascadeChoiceParameter', choiceType: 'PT_SINGLE_SELECT', description: 'Select Image', filterLength: 1, filterable: false, referencedParameters: 'GIT_URI', name: 'GIT_COMMIT_ID', script: [ $class: 'GroovyScript', script: [ classpath: [], sandbox: false, script: ''' import jenkins.model.* import groovy.json.JsonSlurper credentialsId = 'artem-github' def creds = com.cloudbees.plugins.credentials.CredentialsProvider.lookupCredentials( com.cloudbees.plugins.credentials.common.StandardUsernameCredentials.class, Jenkins.instance, null, null ).find{ it.id == credentialsId} def slurper = new JsonSlurper() def account = gitUri.split(":")[-1].split("/")[0] def repo = gitUri.split(":")[-1].split("/")[-1].split("\\\\.")[0] def addr = "https://api.github.com/repos/${account}/${repo}/commits" def authString = "${creds.username}:${creds.password}".getBytes().encodeBase64().toString() def conn = addr.toURL().openConnection() conn.setRequestProperty( "Authorization", "Basic ${authString}" ) def response_json = "${conn.content.text}" def parsed = slurper.parseText(response_json) def commit = [] commit.add("Latest") for (int i = 0; i < parsed.size(); i++) { commit.add(parsed.get(i).sha) } return commit ''' ] ] ] ]) ])